//
//  ZYPopLayerManager.h
//  DesignMode
//
//  Created by wangzhipan on 2024/11/18.
//

#import <Foundation/Foundation.h>
#import "IPopLayerProtocol.h"

/*
 没有引导配置、用户手动触发的引导层需要立马展示
 
 引导层分两种：
 基础避让 类引导层，这类用户不操作界面取消，是不会自动消失的【基础引导都是手动触发，需要立马展示】 isBasic == true
 需要手动操作的引导层，不会自动消失  规定展示时间duration==0
 倒计时x秒自动消失 或者 用户手动点击消失 规定展示时间duration>0
 
 当引导层强制展示时，如果是基础避让正在展示：
    当下一个引导层是强制展示，那么直接覆盖在基础避让引导层 上面
    当下一个引导层非强制展示，那么直接进入队列按优先级排队
 
 当非基础避让层正在展示：
    当下一个引导层b是强制展示：【强制展示同一时间只有一个引导，如果存在多个则丢掉后来的引导】
        当前展示的引导层a是否可以中断，可以则先中断a，再展示b，等b 移除了再恢复a的展示
        当前展示的引导层a不支持中断，则直接移除
 
 
 1、队列里面最多保存2个引导层、按优先级依次排序【可排队，则进入队列，超过2个则丢弃优先级最低的引导】
 2、新加入的request，需要查找配置看是否可以排队、展示秒数、展示次数、是否强制展示【打断当前正在展示的气泡】
 3、被打断的引导层是否支持中断操作、恢复展示操作【不支持则直接移除】
 */
NS_ASSUME_NONNULL_BEGIN

@class ZYPopLayerRule;
@interface ZYPopLayerManager : NSObject
+ (instancetype)sharedInstance;

- (void)addRequest:(id<IPopLayerRequest>)request;
- (void)removeRequest:(id<IPopLayerRequest>)request;
- (ZYPopLayerRule *)findRuleOfPopLayerId:(NSString *)popLayerId;
@end

NS_ASSUME_NONNULL_END
